For example, for an entry within a notebook, previously these 2 rules would
have the same weight:
.entry {}
.notebook {}
Now ".entry" will rank higher than ".notebook" for the GtkEntry, further
specific selectors such as:
.notebook .entry {}
still get a higher score than the previous ones.
SelectorPath *selector)
{
GSList *elements = selector->elements;
- gboolean match = TRUE;
+ gboolean match = TRUE, first = TRUE, first_match = FALSE;
guint64 score = 0;
gint i;
match = compare_selector_element (path, i, elem, &elem_score);
+ if (match && first)
+ first_match = TRUE;
+
/* Only move on to the next index if there is no match
* with the current element (whether to continue or not
* handled right after in the combinator check), or a
score <<= 4;
score |= elem_score;
}
+
+ first = FALSE;
}
/* If there are pending selector
if (!match)
score = 0;
+ else if (first_match)
+ {
+ /* Assign more weight to these selectors
+ * that matched right from the first element.
+ */
+ score <<= 4;
+ }
return score;
}